
// ES5里面只有全局作用域和函数作用域
/* ******************************全局变量********************************** */
// 声明一个全局变量相当于创建了全局对象的一个属性，当使用var 来声明这个变量的时候，那创建的全局属性不可删除
var v1 = 1;
// 可以删除
v2 = 2;
// 同上
this.v3 = 3;
delete v1;
delete v2;
delete v3;

/* *****************************变量提升*************************************** */
// 在一个函数中任何地方声明的变量，在整个函数中都可引用，但是不是未定义就不知道了
function scope(){
  // 先使用
  console.info(demo);
  if(true){
      // 后定义，ES5没有块级作用域
      var demo = "123";
  }
  console.info(demo);
}
scope()

// 由于没有块级作用域，js的函数变量中，会将所有函数内定义的变量，隐式的移动到函数顶部；
// 这种方式叫做变量提升
var gloabl = "123";
function scope1() {
  // undefined ，因为变量提升
  console.info(gloabl);
  var gloabl = "123";
  console.info(gloabl);

  // 这种方式相当于声明了一个全局变量
  global2 = "123";
}
